package com.lu.lambda;

import com.lu.lambda.bean.Person;
import org.junit.Test;

import java.util.Comparator;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * @Date:2021/11/22/20:37
 * @Description:
 */
public class LambdaTest {
    @Test
    public void test01(){
        // 匿名实现类的表达形式
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,02);
            }
        };

        // lambda表达式
        Comparator<Integer> com2 = (o1,o2) -> Integer.compare(o1,o2);
        int compare = com2.compare(1, 2);
        System.out.println("compare = " + compare);

        // 方法引用
        Comparator<Integer> com3 = Integer::compareTo;
        int compare1 = com3.compare(1, 2); // 这个表面上是接口的对象调用方法，实际上是实现类调用方法

        // 特殊情况的方法引用 => 类::实例方法 {参数减1原则}
        // Comparetor中的int compare( T t1,Tt2 )
        // String中的int t1.compareTo(t2)
        Comparator<String> com4 = (s1, s2) -> s1.compareTo(s2);
        Comparator<String> com44 = String::compareTo;

    }

    // 构造器引用  [ 接口-实体类-构造器引用 ]
    public void test02( ) {
        Supplier<Person> supplier = new Supplier<Person>() {
            @Override
            public Person get() {
                return new Person();
            }
        };

        // 等价于
        Supplier<Person> supplier1 = () -> new Person();

        // 等价于
        Supplier<Person> supplier2 = Person ::new;




    }
}
